// Format of an ELF executable file

#define ELF_MAGIC 0x464C457FU  //"\x7FELF" in little endian

//File header
struct elfhdr {
    uint magic;   //must equal ELF_MAGIC
    uchar elf[12];
    ushort type;
    ushort machine;
    uint version;
    uint entry;
    uint phoff;
    uint flags;
    ushort ehsize;
    ushort phentsize;
    ushort phnum;
    ushort shentsize;
    ushort shnum;
    ushort shstrndx;
};

// Program section header
struct proghdr {
    uint type;
    uint off;
    uint vaddr;
    uint paddr;
    uint filesz;
    uint memsz;
    uint flags;
    uint align;
};

// Values for Proghdr type
#define ELF_PROG_LOAD            1

// Flag bits for Proghdr flags
#define ELF_PROG_FLAG_EXEC       1
#define ELF_PROG_FLAG_WRITE      2
#define ELF_PROG_FLAG_READ       3
